﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_BL;
using ECOSYSTEM_Dominio;
using System.IO;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmGarantia : Form, InterfazSerie
    {
        public frmGarantia()
        {
            InitializeComponent();
        }
        Garantia laGarantia = new Garantia();
        GarantiaBL laGarantiaBL = new GarantiaBL();
        AlmacenBL elAlmacenBL = new AlmacenBL();
        ProductoBL elProductoBL = new ProductoBL();
        Int32 Identificador=0;
        private Garantia ObtenerObjetoGarantia() {
            laGarantia.Descripcion = txtDescripcion.Text;
            laGarantia.Serie = txtSerie.Text;
            laGarantia.Estado = cmbEstado.Text;
            laGarantia.FecSalida = dtpFechaSalida.Text;
            if (txtNroDias.Text != "0")
                laGarantia.FecIngreso = txtFechaIngreso.Text;
            else
                laGarantia.FecIngreso = "PENDIENTE";
            laGarantia.ElProducto = Convert.ToInt32(lblCodigoProducto.Text);
            return laGarantia;
        }
        private Boolean GuardarProductoGarantia() {
            Garantia laGarantia = ObtenerObjetoGarantia();
            laGarantiaBL.RegistrarGarantia(laGarantia,Convert.ToInt32(lblSerieID.Text));
            return true;
        }
        private Garantia ObtenerObjetoActualizar() {
            laGarantia.Descripcion = txtDescripcion.Text;
            laGarantia.Serie = txtSerie.Text;
            laGarantia.Estado = cmbEstado.Text;
            laGarantia.FecIngreso = txtFechaIngreso.Text;
            laGarantia.ElProducto = Convert.ToInt32(lblCodigoProducto.Text);
            return laGarantia;
        }
        private Boolean ActualizarGarantia() {
            Garantia laGarantia = ObtenerObjetoActualizar();
            laGarantiaBL.ActualizarGarantia(laGarantia,Convert.ToInt32(lblGarantiaID.Text));
            return true;
        }
        private void ObtenerProductos() {
            if (dgvListaProducto.DataSource == null) {
                dgvListaProducto.DataSource = elAlmacenBL.ObtenerAllProductos();
                filtrador.DataSource = elAlmacenBL.ObtenerAllProductos();
            }
        }
        private void ObetnerProductoEnviadosGarantia() {
            if (dgvListaProducto.DataSource == null) {
                dgvListaProducto.DataSource = laGarantiaBL.ObtenerProductoGarantia();
                filtrador.DataSource = laGarantiaBL.ObtenerProductoGarantia();
            }
        }
        private void AplicarFiltro()
        {
            int ret = filtrar_dgvListaProducto("Producto", txtBuscarProd.Text.Trim(), filtrador, dgvListaProducto);

            if (ret == 0)
            {
                txtBuscarProd.BackColor = Color.Red;
            }
            else
            {
                txtBuscarProd.BackColor = Color.White;
            }
        }
        private int filtrar_dgvListaProducto(String Columna, String texto, BindingSource Binding, DataGridView data)
        {
            if (filtrador.DataSource == null) { return 0; }
            try
            {
                String filtro = String.Empty;
                filtro = "LIKE '%" + texto.Trim() + "%'";
                if (filtro != String.Empty)
                {
                    filtro = "[" + Columna + "]" + filtro;
                }
                Binding.Filter = filtro;
                data.DataSource = Binding.DataSource;
                return Binding.Count;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return 0;
        }
        private void LimpiarCampos() {
            txtBuscarProd.Text = "";
            dgvListaProducto.DataSource = null;
            txtProducto.Text = "";
            txtSerie.Text = "";
            txtFechaIngreso.Text = Convert.ToString(DateTime.Now.ToShortDateString());
            dtpFechaSalida.Value = DateTime.Now;
            txtDescripcion.Text = "";
            pbProducto.Image = null;
            groupBox1.Enabled = false;
            groupBox2.Enabled = false;
            btnNuevo.Enabled = true;
            btnBuscar.Enabled = true;
            btnGuardar.Enabled = false;
            btnUpdate.Enabled = false;
            btnCancelar.Enabled = false;
        }
        public void cargarSerie(string NroSerie, string SerieID)
        {
            txtSerie.Text = NroSerie;
            lblSerieID.Text = SerieID;
        }
        // --> EVENTOS <--

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                ObtenerProductos();
                btnBuscar.Enabled = false;
                btnNuevo.Enabled = false;
                btnGuardar.Enabled = true;
                btnCancelar.Enabled = true;
                groupBox2.Enabled = true;
                Identificador = 0;
                txtFechaIngreso.Text = DateTime.Now.ToShortDateString().ToString();
                txtBuscarProd.Select();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void txtBuscarProd_TextChanged(object sender, EventArgs e)
        {
            try
            {
                AplicarFiltro();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                LimpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                GuardarProductoGarantia();
                MessageBox.Show("PRODUCTO REGISTRADO PARA GARANTIA CORRECTAMENTE");
                LimpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void txtNroDias_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtNroDias.Text != "")
                {
                    Int32 nroDias = Convert.ToInt32(txtNroDias.Text);
                    txtFechaIngreso.Text = Convert.ToString(DateTime.Now.AddDays(nroDias).ToShortDateString());
                }
                else
                {
                    txtNroDias.Text = "0";
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                frmDesactivarSerie formDesSeri = new frmDesactivarSerie();
                formDesSeri.MdiParent = this.MdiParent;
                formDesSeri.Manipular = this;
                formDesSeri.CargarSeriePorProducto(Convert.ToInt32(lblCodigoProducto.Text));
                formDesSeri.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                ObetnerProductoEnviadosGarantia();
                Identificador = 1;
                btnNuevo.Enabled = false;
                btnBuscar.Enabled = false;
                btnUpdate.Enabled = true;
                btnCancelar.Enabled = true;
                groupBox2.Enabled = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void dgvListaProducto_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Int32 nroFila = Int32.Parse(e.RowIndex.ToString());
                txtProducto.Text = Convert.ToString(dgvListaProducto["Producto", nroFila].Value);
                lblCodigoProducto.Text = Convert.ToString(dgvListaProducto["ProductoID", nroFila].Value);
                List<Producto> lista;
                Int32 fila = Int32.Parse(e.RowIndex.ToString());
                lista = elProductoBL.ObtenerImagenProducto(Convert.ToInt32(dgvListaProducto["ProductoID", fila].Value));
                foreach (Producto filas in lista)
                {
                    Byte[] data = (Byte[])(filas.Imagen);
                    Stream ima = new MemoryStream(data);
                    this.pbProducto.Image = Image.FromStream(ima);
                }
                if (Identificador == 0)
                {
                    cmbEstado.SelectedIndex = 0;
                    cmbEstado.Enabled = false;
                }
                if (Identificador == 1) {
                    cmbEstado.Enabled = true;
                    cmbEstado.SelectedItem = Convert.ToString(dgvListaProducto["Estado",nroFila].Value);
                    txtSerie.Text = Convert.ToString(dgvListaProducto["Serie", nroFila].Value);
                    dtpFechaSalida.Value = Convert.ToDateTime(dgvListaProducto["FechaSalida",nroFila].Value);
                    txtFechaIngreso.Text = Convert.ToString(dgvListaProducto["FechaIngreso",nroFila].Value);
                    txtDescripcion.Text = Convert.ToString(dgvListaProducto["Descripcion", nroFila].Value);
                    lblGarantiaID.Text = Convert.ToString(dgvListaProducto["GarantiaID", nroFila].Value);
                }
                groupBox1.Enabled = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                ActualizarGarantia();
                MessageBox.Show("PRODUCTO REGISTRADO PARA GARANTIA CORRECTAMENTE");
                LimpiarCampos();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }        
    }
}
